/**
 *                                                        ____   _____
 *  Dynarch Calendar -- JSCal2, version 1.8               \  /_  /   /
 *  Built at 2010/04/11 12:26 GMT                          \  / /   /
 *                                                          \/ /_  /
 *  (c) Dynarch.com 2009                                     \  / /
 *  All rights reserved.                                       / /
 *  Visit www.dynarch.com/projects/calendar for details        \/
 *
 */
Calendar = (function()
{
  function y( at )
  {
    at = at || {};
    this.args = at = al(at, {animation:!c,cont:null,bottomBar:true,date:true,fdow:aq("fdow"),min:null,max:null,reverseWheel:false,selection:[],selectionType:y.SEL_SINGLE,weekNumbers:false,align:"Bl/ / /T/r",inputField:null,trigger:null,dateFormat:"%Y-%m-%d",opacity:j ? 1 : 3,titleFormat:"%b %Y",showTime:false,timePos:"right",time:true,minuteStep:5,disabled:ad,checkRange:false,dateInfo:ad,onChange:ad,onSelect:ad,onTimeChange:ad,onFocus:ad,onBlur:ad});
    this.handlers = {};
    var P = this,D = new Date();
    at.min = Y(at.min);
    at.max = Y(at.max);
    if ( at.date === true )
    {
      at.date = D
    }
    if ( at.time === true )
    {
      at.time = D.getHours() * 100 + Math.floor(D.getMinutes() / at.minuteStep) * at.minuteStep
    }
    this.date = Y(at.date);
    this.time = at.time;
    this.fdow = at.fdow;
    m("onChange onSelect onTimeChange onFocus onBlur".split(/\s+/), function( av )
    {
      var au = at[av];
      if ( !(au instanceof Array) )
      {
        au = [au]
      }
      P.handlers[av] = au
    });
    this.selection = new y.Selection(at.selection, at.selectionType, R, this);
    var ar = K.call(this);
    if ( at.cont )
    {
      W(at.cont).appendChild(ar)
    }
    if ( at.trigger )
    {
      this.manageFields(at.trigger, at.inputField, at.dateFormat)
    }
  }
  var S = navigator.userAgent,s = /opera/i.test(S),ai = /Konqueror|Safari|KHTML/i.test(S),j = /msie/i.test(S) && !s && !(/mac_powerpc/i.test(S)),c = j && /msie 6/i.test(S),x = /gecko/i.test(S) && !ai && !s && !j,l = y.prototype,q = y.I18N = {};
  y.SEL_NONE = 0;
  y.SEL_SINGLE = 1;
  y.SEL_MULTIPLE = 2;
  y.SEL_WEEK = 3;
  y.dateToInt = V;
  y.intToDate = B;
  y.printDate = ab;
  y.formatString = k;
  y.i18n = aq;
  y.LANG = function( P, D, ar )
  {
    q.__ = q[P] = {name:D,data:ar}
  };
  y.setup = function( D )
  {
    return new y(D)
  };
  l.moveTo = function( aG, aD )
  {
    aG = Y(aG);
    var aC = af(aG, this.date, true),au,az = this.args,aH = az.min && af(aG, az.min),aI = az.max && af(aG, az.max);
    if ( az.showTime )
    {
      this.setHours(aG.getUTCHours());
      this.setMinutes(aG.getUTCMinutes())
    }
    if ( !az.animation )
    {
      aD = false
    }
    ae(aH != null && aH <= 1, [this.els.navPrevMonth,this.els.navPrevYear], "DynarchCalendar-navDisabled");
    ae(aI != null && aI >= -1, [this.els.navNextMonth,this.els.navNextYear], "DynarchCalendar-navDisabled");
    if ( aH < -1 )
    {
      aG = az.min;
      au = 1;
      aC = 0
    }
    if ( aI > 1 )
    {
      aG = az.max;
      au = 2;
      aC = 0
    }
    this.date = aG;
    this.refresh(!!aD);
    this.callHooks("onChange", this, aG, aD);
    if ( aD && !(aC == 0 && aD == 2) )
    {
      if ( this._bodyAnim )
      {
        this._bodyAnim.stop()
      }
      var aw = this.els.body,ax = G("div", "DynarchCalendar-animBody-" + U[aC], aw),aF = aw.firstChild,av = am(aF) || 0.7,ay = au ? Z.brakes : aC == 0 ? Z.shake : Z.accel_ab2,aE = aC * aC > 4,ar = aE ? aF.offsetTop : aF.offsetLeft,aB = ax.style,aA = aE ? aw.offsetHeight : aw.offsetWidth;
      if ( aC < 0 )
      {
        aA += ar
      }
      else
      {
        if ( aC > 0 )
        {
          aA = ar - aA
        }
        else
        {
          aA = Math.round(aA / 7);
          if ( au == 2 )
          {
            aA = -aA
          }
        }
      }
      if ( !au && aC != 0 )
      {
        var P = ax.cloneNode(true),D = P.style,at = 2 * aA;
        P.appendChild(aF.cloneNode(true));
        D[aE ? "marginTop" : "marginLeft"] = aA + "px";
        aw.appendChild(P)
      }
      aF.style.visibility = "hidden";
      ax.innerHTML = ac(this);
      this._bodyAnim = ap({onUpdate:v(function( aK, aM )
      {
        var aL = ay(aK);
        if ( P )
        {
          var aJ = aM(aL, aA, at) + "px"
        }
        if ( au )
        {
          aB[aE ? "marginTop" : "marginLeft"] = aM(aL, aA, 0) + "px"
        }
        else
        {
          if ( aE || aC == 0 )
          {
            aB.marginTop = aM(aC == 0 ? ay(aK * aK) : aL, 0, aA) + "px";
            if ( aC != 0 )
            {
              D.marginTop = aJ
            }
          }
          if ( !aE || aC == 0 )
          {
            aB.marginLeft = aM(aL, 0, aA) + "px";
            if ( aC != 0 )
            {
              D.marginLeft = aJ
            }
          }
        }
        if ( this.args.opacity > 2 && P )
        {
          am(P, 1 - aL);
          am(ax, aL)
        }
      }, this),onStop:v(function( aJ )
      {
        aw.innerHTML = ac(this, aG);
        this._bodyAnim = null
      }, this)})
    }
    this._lastHoverDate = null;
    return aH >= -1 && aI <= 1
  };
  l.isDisabled = function( D )
  {
    var P = this.args;
    return(P.min && af(D, P.min) < 0) || (P.max && af(D, P.max) > 0) || P.disabled(D)
  };
  l.toggleMenu = function()
  {
    u(this, !this._menuVisible)
  };
  l.refresh = function( D )
  {
    var P = this.els;
    if ( !D )
    {
      P.body.innerHTML = ac(this)
    }
    P.title.innerHTML = F(this);
    P.yearInput.value = this.date.getFullYear()
  };
  l.redraw = function()
  {
    var D = this.els;
    this.refresh();
    D.dayNames.innerHTML = h(this);
    D.menu.innerHTML = ak(this);
    if ( D.bottomBar )
    {
      D.bottomBar.innerHTML = H(this)
    }
    t(D.topCont, v(function( ar )
    {
      var P = r[ar.className];
      if ( P )
      {
        D[P] = ar
      }
      if ( ar.className == "DynarchCalendar-menu-year" )
      {
        p(ar, this._focusEvents);
        D.yearInput = ar
      }
      else
      {
        if ( j )
        {
          ar.setAttribute("unselectable", "on")
        }
      }
    }, this));
    this.setTime(null, true)
  };
  l.setLanguage = function( D )
  {
    var P = y.setLanguage(D);
    if ( P )
    {
      this.fdow = P.data.fdow;
      this.redraw()
    }
  };
  y.setLanguage = function( D )
  {
    var P = q[D];
    if ( P )
    {
      q.__ = P
    }
    return P
  };
  l.focus = function()
  {
    try
    {
      this.els[this._menuVisible ? "yearInput" : "focusLink"].focus()
    }
    catch( D )
    {
    }
    i.call(this)
  };
  l.blur = function()
  {
    this.els.focusLink.blur();
    this.els.yearInput.blur();
    z.call(this)
  };
  l.showAt = function( P, ax, av )
  {
    if ( this._showAnim )
    {
      this._showAnim.stop()
    }
    av = av && this.args.animation;
    var aw = this.els.topCont,ar = this,D = this.els.body.firstChild,au = D.offsetHeight,at = aw.style;
    at.position = "absolute";
    at.left = P + "px";
    at.top = ax + "px";
    at.zIndex = 10000;
    at.display = "";
    if ( av )
    {
      D.style.marginTop = -au + "px";
      this.args.opacity > 1 && am(aw, 0);
      this._showAnim = ap({onUpdate:function( ay, az )
      {
        D.style.marginTop = -az(Z.accel_b(ay), au, 0) + "px";
        ar.args.opacity > 1 && am(aw, ay)
      },onStop:function()
      {
        ar.args.opacity > 1 && am(aw, "");
        ar._showAnim = null
      }})
    }
  };
  l.hide = function()
  {
    var at = this.els.topCont,P = this,D = this.els.body.firstChild,ar = D.offsetHeight,au = J(at).y;
    if ( this.args.animation )
    {
      if ( this._showAnim )
      {
        this._showAnim.stop()
      }
      this._showAnim = ap({onUpdate:function( av, aw )
      {
        P.args.opacity > 1 && am(at, 1 - av);
        D.style.marginTop = -aw(Z.accel_b(av), 0, ar) + "px";
        at.style.top = aw(Z.accel_ab(av), au, au - 10) + "px"
      },onStop:function()
      {
        at.style.display = "none";
        D.style.marginTop = "";
        P.args.opacity > 1 && am(at, "");
        P._showAnim = null
      }})
    }
    else
    {
      at.style.display = "none"
    }
    this.inputField = null
  };
  l.popup = function( D, at )
  {
    D = W(D);
    if ( !at )
    {
      at = this.args.align
    }
    at = at.split(/\x2f/);
    var ar = J(D),aw = this.els.topCont,ay = aw.style,au,ax = X();
    ay.visibility = "hidden";
    ay.display = "";
    this.showAt(0, 0);
    document.body.appendChild(aw);
    au = {x:aw.offsetWidth,y:aw.offsetHeight};
    function P( az )
    {
      var aA = {x:av.x,y:av.y};
      if ( !az )
      {
        return aA
      }
      if ( /B/.test(az) )
      {
        aA.y += D.offsetHeight
      }
      if ( /b/.test(az) )
      {
        aA.y += D.offsetHeight - au.y
      }
      if ( /T/.test(az) )
      {
        aA.y -= au.y
      }
      if ( /l/.test(az) )
      {
        aA.x -= au.x - D.offsetWidth
      }
      if ( /L/.test(az) )
      {
        aA.x -= au.x
      }
      if ( /R/.test(az) )
      {
        aA.x += D.offsetWidth
      }
      if ( /c/i.test(az) )
      {
        aA.x += (D.offsetWidth - au.x) / 2
      }
      if ( /m/i.test(az) )
      {
        aA.y += (D.offsetHeight - au.y) / 2
      }
      return aA
    }
    var av = ar;
    av = P(at[0]);
    if ( av.y < ax.y )
    {
      av.y = ar.y;
      av = P(at[1])
    }
    if ( av.x + au.x > ax.x + ax.w )
    {
      av.x = ar.x;
      av = P(at[2])
    }
    if ( av.y + au.y > ax.y + ax.h )
    {
      av.y = ar.y;
      av = P(at[3])
    }
    if ( av.x < ax.x )
    {
      av.x = ar.x;
      av = P(at[4])
    }
    this.showAt(av.x, av.y, true);
    ay.visibility = "";
    this.focus()
  };
  l.manageFields = function( ar, P, D )
  {
    P = W(P);
    p(W(ar), "click", v(function()
    {
      this.inputField = P;
      this.dateFormat = D;
      if ( this.selection.type == y.SEL_SINGLE )
      {
        var aw,av,au,at;
        aw = /input|textarea/i.test(P.tagName) ? P.value : (P.innerText || P.textContent);
        if ( aw )
        {
          av = /(^|[^%])%[bBmo]/.exec(D);
          au = /(^|[^%])%[de]/.exec(D);
          if ( av && au )
          {
            at = av.index < au.index
          }
          aw = Calendar.parseDate(aw, at);
          if ( aw )
          {
            this.selection.set(aw, false, true);
            this.moveTo(aw)
          }
        }
      }
      this.popup(ar)
    }, this))
  };
  l.callHooks = function( ar )
  {
    var at = b(arguments, 1),D = this.handlers[ar],P = 0;
    for ( ; P < D.length; ++P )
    {
      D[P].apply(this, at)
    }
  };
  l.addEventListener = function( P, D )
  {
    this.handlers[P].push(D)
  };
  l.removeEventListener = function( at, ar )
  {
    var D = this.handlers[at],P = D.length;
    while ( --P >= 0 )
    {
      if ( D[P] === ar )
      {
        D.splice(P, 1)
      }
    }
  };
  l.getTime = function()
  {
    return this.time
  };
  l.setTime = function( au, P )
  {
    if ( this.args.showTime )
    {
      au = this.time = au != null ? au : this.time;
      var ar = this.getHours(),D = this.getMinutes(),at = ar < 12;
      if ( this.args.showTime == 12 )
      {
        if ( ar == 0 )
        {
          ar = 12
        }
        if ( ar > 12 )
        {
          ar -= 12
        }
        this.els.timeAM.innerHTML = aq(at ? "AM" : "PM")
      }
      if ( ar < 10 )
      {
        ar = "0" + ar
      }
      if ( D < 10 )
      {
        D = "0" + D
      }
      this.els.timeHour.innerHTML = ar;
      this.els.timeMinute.innerHTML = D;
      if ( !P )
      {
        this.callHooks("onTimeChange", this, au)
      }
    }
  };
  l.getHours = function()
  {
    return Math.floor(this.time / 100)
  };
  l.getMinutes = function()
  {
    return this.time % 100
  };
  l.setHours = function( D )
  {
    if ( D < 0 )
    {
      D += 24
    }
    this.setTime(100 * (D % 24) + this.time % 100)
  };
  l.setMinutes = function( D )
  {
    if ( D < 0 )
    {
      D += 60
    }
    this.setTime(100 * this.getHours() + (D % 60))
  };
  l._getInputYear = function()
  {
    var D = parseInt(this.els.yearInput.value, 10);
    if ( isNaN(D) )
    {
      D = this.date.getFullYear()
    }
    return D
  };
  l._showTooltip = function( D )
  {
    var P = "",at,ar = this.els.tooltip;
    if ( D )
    {
      D = B(D);
      at = this.args.dateInfo(D);
      if ( at && at.tooltip )
      {
        P = "<div class='DynarchCalendar-tooltipCont'>" + ab(D, at.tooltip) + "</div>"
      }
    }
    ar.innerHTML = P
  };
  var ah = " align='center' cellspacing='0' cellpadding='0'";
  function h( D )
  {
    var ar = ["<table",ah,"><tr>"],P = 0;
    if ( D.args.weekNumbers )
    {
      ar.push("<td><div class='DynarchCalendar-weekNumber'>", aq("wk"), "</div></td>")
    }
    while ( P < 7 )
    {
      var at = (P++ + D.fdow) % 7;
      ar.push("<td><div", aq("weekend").indexOf(at) >= 0 ? " class='DynarchCalendar-weekend'>" : ">", aq("sdn")[at], "</div></td>")
    }
    ar.push("</tr></table>");
    return ar.join("")
  }
  function ac( aw, aG, aD )
  {
    aG = aG || aw.date;
    aD = aD || aw.fdow;
    aG = new Date(aG.getFullYear(), aG.getMonth(), aG.getDate(), 12, 0, 0, 0);
    var aI = aG.getMonth(),av = [],aA = 0,D = aw.args.weekNumbers;
    aG.setDate(1);
    var az = (aG.getDay() - aD) % 7;
    if ( az < 0 )
    {
      az += 7
    }
    aG.setDate(-az);
    aG.setDate(aG.getDate() + 1);
    var aE = new Date(),at = aE.getDate(),P = aE.getMonth(),aJ = aE.getFullYear();
    av[aA++] = "<table class='DynarchCalendar-bodyTable'" + ah + ">";
    for ( var aC = 0; aC < 6; ++aC )
    {
      av[aA++] = "<tr class='DynarchCalendar-week";
      if ( aC == 0 )
      {
        av[aA++] = " DynarchCalendar-first-row"
      }
      if ( aC == 5 )
      {
        av[aA++] = " DynarchCalendar-last-row"
      }
      av[aA++] = "'>";
      if ( D )
      {
        av[aA++] = "<td class='DynarchCalendar-first-col'><div class='DynarchCalendar-weekNumber'>" + a(aG) + "</div></td>"
      }
      for ( var aB = 0; aB < 7; ++aB )
      {
        var aF = aG.getDate(),ay = aG.getMonth(),au = aG.getFullYear(),ar = 10000 * au + 100 * (ay + 1) + aF,aH = aw.selection.isSelected(ar),ax = aw.isDisabled(aG);
        av[aA++] = "<td class='";
        if ( aB == 0 && !D )
        {
          av[aA++] = " DynarchCalendar-first-col"
        }
        if ( aB == 0 && aC == 0 )
        {
          aw._firstDateVisible = ar
        }
        if ( aB == 6 )
        {
          av[aA++] = " DynarchCalendar-last-col";
          if ( aC == 5 )
          {
            aw._lastDateVisible = ar
          }
        }
        if ( aH )
        {
          av[aA++] = " DynarchCalendar-td-selected"
        }
        av[aA++] = "'><div dyc-type='date' unselectable='on' dyc-date='" + ar + "' ";
        if ( ax )
        {
          av[aA++] = "disabled='1' "
        }
        av[aA++] = "class='DynarchCalendar-day";
        if ( aq("weekend").indexOf(aG.getDay()) >= 0 )
        {
          av[aA++] = " DynarchCalendar-weekend"
        }
        if ( ay != aI )
        {
          av[aA++] = " DynarchCalendar-day-othermonth"
        }
        if ( aF == at && ay == P && au == aJ )
        {
          av[aA++] = " DynarchCalendar-day-today"
        }
        if ( ax )
        {
          av[aA++] = " DynarchCalendar-day-disabled"
        }
        if ( aH )
        {
          av[aA++] = " DynarchCalendar-day-selected"
        }
        ax = aw.args.dateInfo(aG);
        if ( ax && ax.klass )
        {
          av[aA++] = " " + ax.klass
        }
        av[aA++] = "'>" + aF + "</div></td>";
        aG = new Date(au, ay, aF + 1, 12, 0, 0, 0)
      }
      av[aA++] = "</tr>"
    }
    av[aA++] = "</table>";
    return av.join("")
  }
  function n( D )
  {
    var P = ["<table class='DynarchCalendar-topCont'",ah,"><tr><td><div class='DynarchCalendar'>",!j ? "<button class='DynarchCalendar-focusLink'></button>" : "<a class='DynarchCalendar-focusLink' href='#'></a>","<div class='DynarchCalendar-topBar'><div dyc-type='nav' dyc-btn='-Y' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-prevYear'><div></div></div><div dyc-type='nav' dyc-btn='+Y' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-nextYear'><div></div></div><div dyc-type='nav' dyc-btn='-M' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-prevMonth'><div></div></div><div dyc-type='nav' dyc-btn='+M' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-nextMonth'><div></div></div><table class='DynarchCalendar-titleCont'",ah,"><tr><td><div dyc-type='title' dyc-btn='menu' dyc-cls='hover-title,pressed-title' class='DynarchCalendar-title'>",F(D),"</div></td></tr></table><div class='DynarchCalendar-dayNames'>",h(D),"</div></div><div class='DynarchCalendar-body'></div>"];
    if ( D.args.bottomBar || D.args.showTime )
    {
      P.push("<div class='DynarchCalendar-bottomBar'>", H(D), "</div>")
    }
    P.push("<div class='DynarchCalendar-menu' style='display: none'>", ak(D), "</div><div class='DynarchCalendar-tooltip'></div></div></td></tr></table>");
    return P.join("")
  }
  function F( D )
  {
    return"<div unselectable='on'>" + ab(D.date, D.args.titleFormat) + "</div>"
  }
  function ak( P )
  {
    var au = ["<table height='100%'",ah,"><tr><td><table style='margin-top: 1.5em'",ah,"><tr><td colspan='3'><input dyc-btn='year' class='DynarchCalendar-menu-year' size='6' value='",P.date.getFullYear(),"' /></td></tr><tr><td><div dyc-type='menubtn' dyc-cls='hover-navBtn,pressed-navBtn' dyc-btn='today'>",aq("goToday"),"</div></td></tr></table><p class='DynarchCalendar-menu-sep'>&nbsp;</p><table class='DynarchCalendar-menu-mtable'",ah,">"],av = aq("smn"),at = 0,D = au.length,ar;
    while ( at < 12 )
    {
      au[D++] = "<tr>";
      for ( ar = 4; --ar > 0; )
      {
        au[D++] = "<td><div dyc-type='menubtn' dyc-cls='hover-navBtn,pressed-navBtn' dyc-btn='m" + at + "' class='DynarchCalendar-menu-month'>" + av[at++] + "</div></td>"
      }
      au[D++] = "</tr>"
    }
    au[D++] = "</table></td></tr></table>";
    return au.join("")
  }
  function w( D, P )
  {
    P.push("<table class='DynarchCalendar-time'" + ah + "><tr><td rowspan='2'><div dyc-type='time-hour' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-hour'></div></td><td dyc-type='time-hour+' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-up'></td><td rowspan='2' class='DynarchCalendar-time-sep'></td><td rowspan='2'><div dyc-type='time-min' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-minute'></div></td><td dyc-type='time-min+' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-up'></td>");
    if ( D.args.showTime == 12 )
    {
      P.push("<td rowspan='2' class='DynarchCalendar-time-sep'></td><td rowspan='2'><div class='DynarchCalendar-time-am' dyc-type='time-am' dyc-cls='hover-time,pressed-time'></div></td>")
    }
    P.push("</tr><tr><td dyc-type='time-hour-' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-down'></td><td dyc-type='time-min-' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-down'></td></tr></table>")
  }
  function H( D )
  {
    var ar = [],P = D.args;
    ar.push("<table", ah, " style='width:100%'><tr>");
    function at()
    {
      if ( P.showTime )
      {
        ar.push("<td>");
        w(D, ar);
        ar.push("</td>")
      }
    }
    if ( P.timePos == "left" )
    {
      at()
    }
    if ( P.bottomBar )
    {
      ar.push("<td>");
      ar.push("<table", ah, "><tr><td><div dyc-btn='today' dyc-cls='hover-bottomBar-today,pressed-bottomBar-today' dyc-type='bottomBar-today' class='DynarchCalendar-bottomBar-today'>", aq("today"), "</div></td></tr></table>");
      ar.push("</td>")
    }
    if ( P.timePos == "right" )
    {
      at()
    }
    ar.push("</tr></table>");
    return ar.join("")
  }
  var r = {"DynarchCalendar-topCont":"topCont","DynarchCalendar-focusLink":"focusLink",DynarchCalendar:"main","DynarchCalendar-topBar":"topBar","DynarchCalendar-title":"title","DynarchCalendar-dayNames":"dayNames","DynarchCalendar-body":"body","DynarchCalendar-menu":"menu","DynarchCalendar-menu-year":"yearInput","DynarchCalendar-bottomBar":"bottomBar","DynarchCalendar-tooltip":"tooltip","DynarchCalendar-time-hour":"timeHour","DynarchCalendar-time-minute":"timeMinute","DynarchCalendar-time-am":"timeAM","DynarchCalendar-navBtn DynarchCalendar-prevYear":"navPrevYear","DynarchCalendar-navBtn DynarchCalendar-nextYear":"navNextYear","DynarchCalendar-navBtn DynarchCalendar-prevMonth":"navPrevMonth","DynarchCalendar-navBtn DynarchCalendar-nextMonth":"navNextMonth"};
  function K()
  {
    var ar = G("div"),P = this.els = {},D = {mousedown:v(I, this, true),mouseup:v(I, this, false),mouseover:v(T, this, true),mouseout:v(T, this, false),keypress:v(L, this)};
    D[x ? "DOMMouseScroll" : "mousewheel"] = v(E, this);
    if ( j )
    {
      D.dblclick = D.mousedown;
      D.keydown = D.keypress
    }
    ar.innerHTML = n(this);
    t(ar.firstChild, function( au )
    {
      var at = r[au.className];
      if ( at )
      {
        P[at] = au
      }
      if ( j )
      {
        au.setAttribute("unselectable", "on")
      }
    });
    p(P.main, D);
    p([P.focusLink,P.yearInput], this._focusEvents = {focus:v(i, this),blur:v(e, this)});
    this.moveTo(this.date, false);
    this.setTime(null, true);
    return P.topCont
  }
  function i()
  {
    if ( this._bluringTimeout )
    {
      clearTimeout(this._bluringTimeout)
    }
    this.focused = true;
    M(this.els.main, "DynarchCalendar-focused");
    this.callHooks("onFocus", this)
  }
  function z()
  {
    this.focused = false;
    aj(this.els.main, "DynarchCalendar-focused");
    if ( this._menuVisible )
    {
      u(this, false)
    }
    if ( !this.args.cont )
    {
      this.hide()
    }
    this.callHooks("onBlur", this)
  }
  function e()
  {
    this._bluringTimeout = setTimeout(v(z, this), 50)
  }
  function N( D )
  {
    switch ( D )
      {case"time-hour+":this.setHours(this.getHours() + 1);break;case"time-hour-":this.setHours(this.getHours() - 1);break;case"time-min+":this.setMinutes(this.getMinutes() + this.args.minuteStep);break;case"time-min-":this.setMinutes(this.getMinutes() - this.args.minuteStep);break;default:return}
  }
  var U = {"-3":"backYear","-2":"back","0":"now","2":"fwd","3":"fwdYear"};
  function aa( P, at, D )
  {
    if ( this._bodyAnim )
    {
      this._bodyAnim.stop()
    }
    var ar;
    if ( at != 0 )
    {
      ar = new Date(P.date);
      ar.setDate(1);
      switch ( at )
        {case"-Y":case -2:ar.setFullYear(ar.getFullYear() - 1);break;case"+Y":case 2:ar.setFullYear(ar.getFullYear() + 1);break;case"-M":case -1:ar.setMonth(ar.getMonth() - 1);break;case"+M":case 1:ar.setMonth(ar.getMonth() + 1);break}
    }
    else
    {
      ar = new Date()
    }
    return P.moveTo(ar, !D)
  }
  function u( ar, P )
  {
    ar._menuVisible = P;
    ae(P, ar.els.title, "DynarchCalendar-pressed-title");
    var at = ar.els.menu;
    if ( c )
    {
      at.style.height = ar.els.main.offsetHeight + "px"
    }
    if ( !ar.args.animation )
    {
      O(at, P);
      if ( ar.focused )
      {
        ar.focus()
      }
    }
    else
    {
      if ( ar._menuAnim )
      {
        ar._menuAnim.stop()
      }
      var D = ar.els.main.offsetHeight;
      if ( c )
      {
        at.style.width = ar.els.topBar.offsetWidth + "px"
      }
      if ( P )
      {
        at.firstChild.style.marginTop = -D + "px";
        ar.args.opacity > 0 && am(at, 0);
        O(at, true)
      }
      ar._menuAnim = ap({onUpdate:function( au, av )
      {
        at.firstChild.style.marginTop = av(Z.accel_b(au), -D, 0, !P) + "px";
        ar.args.opacity > 0 && am(at, av(Z.accel_b(au), 0, 0.85, !P))
      },onStop:function()
      {
        ar.args.opacity > 0 && am(at, 0.85);
        at.firstChild.style.marginTop = "";
        ar._menuAnim = null;
        if ( !P )
        {
          O(at, false);
          if ( ar.focused )
          {
            ar.focus()
          }
        }
      }})
    }
  }
  function I( az, ay )
  {
    ay = ay || window.event;
    var au = o(ay);
    if ( au && !au.getAttribute("disabled") )
    {
      var D = au.getAttribute("dyc-btn"),ax = au.getAttribute("dyc-type"),av = au.getAttribute("dyc-date"),at = this.selection,ar,P = {mouseover:an,mousemove:an,mouseup:function(
        aC )
      {
        var aB = au.getAttribute("dyc-cls");
        if ( aB )
        {
          aj(au, ao(aB, 1))
        }
        clearTimeout(ar);
        d(document, P, true);
        P = null
      }};
      if ( az )
      {
        setTimeout(v(this.focus, this), 1);
        var aA = au.getAttribute("dyc-cls");
        if ( aA )
        {
          M(au, ao(aA, 1))
        }
        if ( "menu" == D )
        {
          this.toggleMenu()
        }
        else
        {
          if ( au && /^[+-][MY]$/.test(D) )
          {
            if ( aa(this, D) )
            {
              var aw = v(function()
              {
                if ( aa(this, D, true) )
                {
                  ar = setTimeout(aw, 40)
                }
                else
                {
                  P.mouseup();
                  aa(this, D)
                }
              }, this);
              ar = setTimeout(aw, 350);
              p(document, P, true)
            }
            else
            {
              P.mouseup()
            }
          }
          else
          {
            if ( "year" == D )
            {
              this.els.yearInput.focus();
              this.els.yearInput.select()
            }
            else
            {
              if ( ax == "time-am" )
              {
                p(document, P, true)
              }
              else
              {
                if ( /^time/.test(ax) )
                {
                  var aw = v(function( aB )
                  {
                    N.call(this, aB);
                    ar = setTimeout(aw, 100)
                  }, this, ax);
                  N.call(this, ax);
                  ar = setTimeout(aw, 350);
                  p(document, P, true)
                }
                else
                {
                  if ( av && at.type )
                  {
                    if ( at.type == y.SEL_MULTIPLE )
                    {
                      if ( ay.shiftKey && this._selRangeStart )
                      {
                        at.selectRange(this._selRangeStart, av)
                      }
                      else
                      {
                        if ( !ay.ctrlKey && !at.isSelected(av) )
                        {
                          at.clear(true)
                        }
                        at.set(av, true);
                        this._selRangeStart = av
                      }
                    }
                    else
                    {
                      at.set(av);
                      this.moveTo(B(av), 2)
                    }
                    au = this._getDateDiv(av);
                    T.call(this, true, {target:au})
                  }
                  p(document, P, true)
                }
              }
            }
          }
        }
        if ( j && P && /dbl/i.test(ay.type) )
        {
          P.mouseup()
        }
        if ( /^(DynarchCalendar-(topBar|bottomBar|weekend|weekNumber|menu(-sep)?))?$/.test(au.className) && !this.args.cont )
        {
          P.mousemove = v(g, this);
          this._mouseDiff = f(ay, J(this.els.topCont));
          p(document, P, true)
        }
      }
      else
      {
        if ( "today" == D )
        {
          if ( !this._menuVisible && at.type == y.SEL_SINGLE )
          {
            at.set(new Date())
          }
          this.moveTo(new Date(), true);
          u(this, false)
        }
        else
        {
          if ( /^m([0-9]+)/.test(D) )
          {
            var av = new Date(this.date);
            av.setDate(1);
            av.setMonth(RegExp.$1);
            av.setFullYear(this._getInputYear());
            this.moveTo(av, true);
            u(this, false)
          }
          else
          {
            if ( ax == "time-am" )
            {
              this.setHours(this.getHours() + 12)
            }
          }
        }
      }
      if ( !j )
      {
        an(ay)
      }
    }
  }
  function g( P )
  {
    P = P || window.event;
    var D = this.els.topCont.style,ar = f(P, this._mouseDiff);
    D.left = ar.x + "px";
    D.top = ar.y + "px"
  }
  function o( P )
  {
    var D = P.target || P.srcElement,ar = D;
    while ( D && D.getAttribute && !D.getAttribute("dyc-type") )
    {
      D = D.parentNode
    }
    return D.getAttribute && D || ar
  }
  function ao( D, P )
  {
    return"DynarchCalendar-" + D.split(/,/)[P]
  }
  function T( au, at )
  {
    at = at || window.event;
    var ar = o(at);
    if ( ar )
    {
      var P = ar.getAttribute("dyc-type");
      if ( P && !ar.getAttribute("disabled") )
      {
        if ( !au || !this._bodyAnim || P != "date" )
        {
          var D = ar.getAttribute("dyc-cls");
          D = D ? ao(D, 0) : "DynarchCalendar-hover-" + P;
          if ( P != "date" || this.selection.type )
          {
            ae(au, ar, D)
          }
          if ( P == "date" )
          {
            ae(au, ar.parentNode.parentNode, "DynarchCalendar-hover-week");
            this._showTooltip(ar.getAttribute("dyc-date"))
          }
          if ( /^time-hour/.test(P) )
          {
            ae(au, this.els.timeHour, "DynarchCalendar-hover-time")
          }
          if ( /^time-min/.test(P) )
          {
            ae(au, this.els.timeMinute, "DynarchCalendar-hover-time")
          }
          aj(this._getDateDiv(this._lastHoverDate), "DynarchCalendar-hover-date");
          this._lastHoverDate = null
        }
      }
    }
    if ( !au )
    {
      this._showTooltip()
    }
  }
  function E( ar )
  {
    ar = ar || window.event;
    var P = o(ar);
    if ( P )
    {
      var at = P.getAttribute("dyc-btn"),D = P.getAttribute("dyc-type"),au = ar.wheelDelta ? ar.wheelDelta / 120 : -ar.detail / 3;
      au = au < 0 ? -1 : au > 0 ? 1 : 0;
      if ( this.args.reverseWheel )
      {
        au = -au
      }
      if ( /^(time-(hour|min))/.test(D) )
      {
        switch ( RegExp.$1 )
          {case"time-hour":this.setHours(this.getHours() + au);break;case"time-min":this.setMinutes(this.getMinutes() + this.args.minuteStep * au);break}
        an(ar)
      }
      else
      {
        if ( /Y/i.test(at) )
        {
          au *= 2
        }
        aa(this, -au);
        an(ar)
      }
    }
  }
  function R()
  {
    this.refresh();
    var D = this.inputField,P = this.selection;
    if ( D )
    {
      var ar = P.print(this.dateFormat);
      (/input|textarea/i.test(D.tagName)) ? D.value = ar : D.innerHTML = ar
    }
    this.callHooks("onSelect", this, P)
  }
  var ag = {37:-1,38:-2,39:1,40:2},Q = {33:-1,34:1};
  function L( aB )
  {
    if ( this._menuAnim )
    {
      return
    }
    aB = aB || window.event;
    var ar = aB.target || aB.srcElement,aC = ar.getAttribute("dyc-btn"),aD = aB.keyCode,ay = aB.charCode || aD,D = ag[aD];
    if ( "year" == aC && aD == 13 )
    {
      var au = new Date(this.date);
      au.setDate(1);
      au.setFullYear(this._getInputYear());
      this.moveTo(au, true);
      u(this, false);
      return an(aB)
    }
    if ( this._menuVisible )
    {
      if ( aD == 27 )
      {
        u(this, false);
        return an(aB)
      }
    }
    else
    {
      if ( !aB.ctrlKey )
      {
        D = null
      }
      if ( D == null && !aB.ctrlKey )
      {
        D = Q[aD]
      }
      if ( aD == 36 )
      {
        D = 0
      }
      if ( D != null )
      {
        aa(this, D);
        return an(aB)
      }
      ay = String.fromCharCode(ay).toLowerCase();
      var ax = this.els.yearInput,P = this.selection;
      if ( ay == " " )
      {
        u(this, true);
        this.focus();
        ax.focus();
        ax.select();
        return an(aB)
      }
      if ( ay >= "0" && ay <= "9" )
      {
        u(this, true);
        this.focus();
        ax.value = ay;
        ax.focus();
        return an(aB)
      }
      var av = aq("mn"),az = aB.shiftKey ? -1 : this.date.getMonth(),aw = 0,at;
      while ( ++aw < 12 )
      {
        at = av[(az + aw) % 12].toLowerCase();
        if ( at.indexOf(ay) == 0 )
        {
          var au = new Date(this.date);
          au.setDate(1);
          au.setMonth((az + aw) % 12);
          this.moveTo(au, true);
          return an(aB)
        }
      }
      if ( aD >= 37 && aD <= 40 )
      {
        var au = this._lastHoverDate;
        if ( !au && !P.isEmpty() )
        {
          au = aD < 39 ? P.getFirstDate() : P.getLastDate();
          if ( au < this._firstDateVisible || au > this._lastDateVisible )
          {
            au = null
          }
        }
        if ( !au )
        {
          au = aD < 39 ? this._lastDateVisible : this._firstDateVisible
        }
        else
        {
          var aA = au;
          au = B(au);
          var az = 100;
          while ( az-- > 0 )
          {
            switch ( aD )
              {case 37:au.setDate(au.getDate() - 1);break;case 38:au.setDate(au.getDate() - 7);break;case 39:au.setDate(au.getDate() + 1);break;case 40:au.setDate(au.getDate() + 7);break}
            if ( !this.isDisabled(au) )
            {
              break
            }
          }
          au = V(au);
          if ( au < this._firstDateVisible || au > this._lastDateVisible )
          {
            this.moveTo(au)
          }
        }
        aj(this._getDateDiv(aA), M(this._getDateDiv(au), "DynarchCalendar-hover-date"));
        this._lastHoverDate = au;
        return an(aB)
      }
      if ( aD == 13 )
      {
        if ( this._lastHoverDate )
        {
          if ( P.type == y.SEL_MULTIPLE && (aB.shiftKey || aB.ctrlKey) )
          {
            if ( aB.shiftKey && this._selRangeStart )
            {
              P.clear(true);
              P.selectRange(this._selRangeStart, this._lastHoverDate)
            }
            if ( aB.ctrlKey )
            {
              P.set(this._selRangeStart = this._lastHoverDate, true)
            }
          }
          else
          {
            P.reset(this._selRangeStart = this._lastHoverDate)
          }
          return an(aB)
        }
      }
      if ( aD == 27 && !this.args.cont )
      {
        this.hide()
      }
    }
  }
  l._getDateDiv = function( D )
  {
    var ar = null;
    if ( D )
    {
      try
      {
        t(this.els.body, function( at )
        {
          if ( at.getAttribute("dyc-date") == D )
          {
            throw ar = at
          }
        })
      }
      catch( P )
      {
      }
    }
    return ar
  };
  function k( D, P )
  {
    return D.replace(/\$\{([^:\}]+)(:[^\}]+)?\}/g, function( av, au, at )
    {
      var aw = P[au],ar;
      if ( at )
      {
        ar = at.substr(1).split(/\s*\|\s*/);
        aw = (aw >= ar.length ? ar[ar.length - 1] : ar[aw]).replace(/##?/g, function( ax )
        {
          return ax.length == 2 ? "#" : aw
        })
      }
      return aw
    })
  }
  function aq( ar, P )
  {
    var D = q.__.data[ar];
    if ( P && typeof D == "string" )
    {
      D = k(D, P)
    }
    return D
  }
  (y.Selection = function( ar, P, D, at )
  {
    this.type = P;
    this.sel = ar instanceof Array ? ar : [ar];
    this.onChange = v(D, at);
    this.cal = at
  }).prototype = {get:function()
  {
    return this.type == y.SEL_SINGLE ? this.sel[0] : this.sel
  },isEmpty:function()
  {
    return this.sel.length == 0
  },set:function( P, D, ar )
  {
    var at = this.type == y.SEL_SINGLE;
    if ( P instanceof Array )
    {
      this.sel = P;
      this.normalize();
      if ( !ar )
      {
        this.onChange(this)
      }
    }
    else
    {
      P = V(P);
      if ( at || !this.isSelected(P) )
      {
        at ? this.sel = [P] : this.sel.splice(this.findInsertPos(P), 0, P);
        this.normalize();
        if ( !ar )
        {
          this.onChange(this)
        }
      }
      else
      {
        if ( D )
        {
          this.unselect(P, ar)
        }
      }
    }
  },reset:function()
  {
    this.sel = [];
    this.set.apply(this, arguments)
  },countDays:function()
  {
    var av = 0,D = this.sel,P = D.length,at,au,ar;
    while ( --P >= 0 )
    {
      at = D[P];
      if ( at instanceof Array )
      {
        au = B(at[0]);
        ar = B(at[1]);
        av += Math.round(Math.abs(ar.getTime() - au.getTime()) / 86400000)
      }
      ++av
    }
    return av
  },unselect:function( P, ar )
  {
    P = V(P);
    var at = false;
    for ( var ay = this.sel,au = ay.length,D; --au >= 0; )
    {
      D = ay[au];
      if ( D instanceof Array )
      {
        if ( P >= D[0] && P <= D[1] )
        {
          var av = B(P),ax = av.getDate();
          if ( P == D[0] )
          {
            av.setDate(ax + 1);
            D[0] = V(av);
            at = true
          }
          else
          {
            if ( P == D[1] )
            {
              av.setDate(ax - 1);
              D[1] = V(av);
              at = true
            }
            else
            {
              var aw = new Date(av);
              aw.setDate(ax + 1);
              av.setDate(ax - 1);
              ay.splice(au + 1, 0, [V(aw),D[1]]);
              D[1] = V(av);
              at = true
            }
          }
        }
      }
      else
      {
        if ( P == D )
        {
          ay.splice(au, 1);
          at = true
        }
      }
    }
    if ( at )
    {
      this.normalize();
      if ( !ar )
      {
        this.onChange(this)
      }
    }
  },normalize:function()
  {
    this.sel = this.sel.sort(function( ay, ax )
    {
      if ( ay instanceof Array )
      {
        ay = ay[0]
      }
      if ( ax instanceof Array )
      {
        ax = ax[0]
      }
      return ay - ax
    });
    for ( var P = this.sel,ar = P.length,av,au; --ar >= 0; )
    {
      av = P[ar];
      if ( av instanceof Array )
      {
        if ( av[0] > av[1] )
        {
          P.splice(ar, 1);
          continue
        }
        if ( av[0] == av[1] )
        {
          av = P[ar] = av[0]
        }
      }
      if ( au )
      {
        var at = au,aw = av instanceof Array ? av[1] : av;
        aw = B(aw);
        aw.setDate(aw.getDate() + 1);
        aw = V(aw);
        if ( aw >= at )
        {
          var D = P[ar + 1];
          if ( av instanceof Array && D instanceof Array )
          {
            av[1] = D[1];
            P.splice(ar + 1, 1)
          }
          else
          {
            if ( av instanceof Array )
            {
              av[1] = au;
              P.splice(ar + 1, 1)
            }
            else
            {
              if ( D instanceof Array )
              {
                D[0] = av;
                P.splice(ar, 1)
              }
              else
              {
                P[ar] = [av,D];
                P.splice(ar + 1, 1)
              }
            }
          }
        }
      }
      au = av instanceof Array ? av[0] : av
    }
  },findInsertPos:function( P )
  {
    for ( var D = this.sel,ar = D.length,at; --ar >= 0; )
    {
      at = D[ar];
      if ( at instanceof Array )
      {
        at = at[0]
      }
      if ( at <= P )
      {
        break
      }
    }
    return ar + 1
  },clear:function( D )
  {
    this.sel = [];
    if ( !D )
    {
      this.onChange(this)
    }
  },selectRange:function( au, at )
  {
    au = V(au);
    at = V(at);
    if ( au > at )
    {
      var ar = au;
      au = at;
      at = ar
    }
    var D = this.cal.args.checkRange;
    if ( !D )
    {
      return this._do_selectRange(au, at)
    }
    try
    {
      m(new y.Selection([[au,at]], y.SEL_MULTIPLE, ad).getDates(), v(function( av )
      {
        if ( this.isDisabled(av) )
        {
          if ( D instanceof Function )
          {
            D(av, this)
          }
          throw"OUT"
        }
      }, this.cal));
      this._do_selectRange(au, at)
    }
    catch( P )
    {
    }
  },_do_selectRange:function( P, D )
  {
    this.sel.push([P,D]);
    this.normalize();
    this.onChange(this)
  },isSelected:function( D )
  {
    for ( var P = this.sel.length,ar; --P >= 0; )
    {
      ar = this.sel[P];
      if ( ar instanceof Array && D >= ar[0] && D <= ar[1] || D == ar )
      {
        return true
      }
    }
    return false
  },getFirstDate:function()
  {
    var D = this.sel[0];
    if ( D && D instanceof Array )
    {
      D = D[0]
    }
    return D
  },getLastDate:function()
  {
    if ( this.sel.length > 0 )
    {
      var D = this.sel[this.sel.length - 1];
      if ( D && D instanceof Array )
      {
        D = D[1]
      }
      return D
    }
  },print:function( ar, at )
  {
    var P = [],au = 0,aw,av = this.cal.getHours(),D = this.cal.getMinutes();
    if ( !at )
    {
      at = " -> "
    }
    while ( au < this.sel.length )
    {
      aw = this.sel[au++];
      if ( aw instanceof Array )
      {
        P.push(ab(B(aw[0], av, D), ar) + at + ab(B(aw[1], av, D), ar))
      }
      else
      {
        P.push(ab(B(aw, av, D), ar))
      }
    }
    return P
  },getDates:function( P )
  {
    var D = [],ar = 0,au,at;
    while ( ar < this.sel.length )
    {
      at = this.sel[ar++];
      if ( at instanceof Array )
      {
        au = B(at[0]);
        at = at[1];
        while ( V(au) < at )
        {
          D.push(P ? ab(au, P) : new Date(au));
          au.setDate(au.getDate() + 1)
        }
      }
      else
      {
        au = B(at)
      }
      D.push(P ? ab(au, P) : au)
    }
    return D
  }};
  function a( P )
  {
    P = new Date(P.getFullYear(), P.getMonth(), P.getDate(), 12, 0, 0);
    var ar = P.getDay();
    P.setDate(P.getDate() - (ar + 6) % 7 + 3);
    var D = P.valueOf();
    P.setMonth(0);
    P.setDate(4);
    return Math.round((D - P.valueOf()) / (7 * 86400000)) + 1
  }
  function C( D )
  {
    D = new Date(D.getFullYear(), D.getMonth(), D.getDate(), 12, 0, 0);
    var ar = new Date(D.getFullYear(), 0, 1, 12, 0, 0);
    var P = D - ar;
    return Math.floor(P / 86400000)
  }
  function V( D )
  {
    if ( D instanceof Date )
    {
      return 10000 * D.getFullYear() + 100 * (D.getMonth() + 1) + D.getDate()
    }
    if ( typeof D == "string" )
    {
      return parseInt(D, 10)
    }
    return D
  }
  function B( ar, au, av, at, P )
  {
    if ( !(ar instanceof Date) )
    {
      ar = parseInt(ar, 10);
      var aw = Math.floor(ar / 10000);
      ar = ar % 10000;
      var D = Math.floor(ar / 100);
      ar = ar % 100;
      ar = new Date(aw, D - 1, ar, au || 12, av || 0, at || 0, P || 0)
    }
    return ar
  }
  function af( aw, au, ar )
  {
    var av = aw.getFullYear(),ay = aw.getMonth(),P = aw.getDate(),at = au.getFullYear(),ax = au.getMonth(),D = au.getDate();
    return av < at ? -3 : av > at ? 3 : ay < ax ? -2 : ay > ax ? 2 : ar ? 0 : P < D ? -1 : P > D ? 1 : 0
  }
  function ab( D, ax )
  {
    var P = D.getMonth(),aw = D.getDate(),ay = D.getFullYear(),az = a(D),aA = D.getDay(),aB = D.getHours(),ar = (aB >= 12),au = (ar) ? (aB - 12) : aB,aD = C(D),at = D.getMinutes(),av = D.getSeconds(),aC = /%./g,aE;
    if ( au === 0 )
    {
      au = 12
    }
    aE = {"%a":aq("sdn")[aA],"%A":aq("dn")[aA],"%b":aq("smn")[P],"%B":aq("mn")[P],"%C":1 + Math.floor(ay / 100),"%d":aw < 10 ? "0" + aw : aw,"%e":aw,"%H":aB < 10 ? "0" + aB : aB,"%I":au < 10 ? "0" + au : au,"%j":aD < 10 ? "00" + aD : aD < 100 ? "0" + aD : aD,"%k":aB,"%l":au,"%m":P < 9 ? "0" + (1 + P) : 1 + P,"%o":1 + P,"%M":at < 10 ? "0" + at : at,"%n":"\n","%p":ar ? "PM" : "AM","%P":ar ? "pm" : "am","%s":Math.floor(D.getTime() / 1000),"%S":av < 10 ? "0" + av : av,"%t":"\t","%U":az < 10 ? "0" + az : az,"%W":az < 10 ? "0" + az : az,"%V":az < 10 ? "0" + az : az,"%u":aA + 1,"%w":aA,"%y":("" + ay).substr(2, 2),"%Y":ay,"%%":"%"};
    return ax.replace(aC, function( aF )
    {
      return aE.hasOwnProperty(aF) ? aE[aF] : aF
    })
  }
  function Y( P )
  {
    if ( P )
    {
      if ( typeof P == "number" )
      {
        return B(P)
      }
      if ( !(P instanceof Date) )
      {
        var D = P.split(/-/);
        return new Date(parseInt(D[0], 10), parseInt(D[1], 10) - 1, parseInt(D[2], 10), 12, 0, 0, 0)
      }
    }
    return P
  }
  function A( ar )
  {
    if ( /\S/.test(ar) )
    {
      ar = ar.toLowerCase();
      function P( at )
      {
        for ( var au = at.length; --au >= 0; )
        {
          if ( at[au].toLowerCase().indexOf(ar) == 0 )
          {
            return au
          }
        }
      }
      var D = P(aq("smn")) || P(aq("mn"));
      if ( D != null )
      {
        D++
      }
      return D
    }
  }
  y.parseDate = function( au, D, aw )
  {
    if ( !/\S/.test(au) )
    {
      return""
    }
    au = au.replace(/^\s+/, "").replace(/\s+$/, "");
    aw = aw || new Date();
    var aB = null,P = null,aD = null,av = null,ar = null,aC = null;
    var ay = au.match(/([0-9]{1,2}):([0-9]{1,2})(:[0-9]{1,2})?\s*(am|pm)?/i);
    if ( ay )
    {
      av = parseInt(ay[1], 10);
      ar = parseInt(ay[2], 10);
      aC = ay[3] ? parseInt(ay[3].substr(1), 10) : 0;
      au = au.substring(0, ay.index) + au.substr(ay.index + ay[0].length);
      if ( ay[4] )
      {
        if ( ay[4].toLowerCase() == "pm" && av < 12 )
        {
          av += 12
        }
        else
        {
          if ( ay[4].toLowerCase() == "am" && av >= 12 )
          {
            av -= 12
          }
        }
      }
    }
    var az = au.split(/\W+/);
    var ax = [];
    for ( var at = 0; at < az.length; ++at )
    {
      var aA = az[at];
      if ( /^[0-9]{4}$/.test(aA) )
      {
        aB = parseInt(aA, 10);
        if ( !P && !aD && D == null )
        {
          D = true
        }
      }
      else
      {
        if ( /^[0-9]{1,2}$/.test(aA) )
        {
          aA = parseInt(aA, 10);
          if ( aA >= 60 )
          {
            aB = aA
          }
          else
          {
            if ( aA >= 0 && aA <= 12 )
            {
              ax.push(aA)
            }
            else
            {
              if ( aA >= 1 && aA <= 31 )
              {
                aD = aA
              }
            }
          }
        }
        else
        {
          P = A(aA)
        }
      }
    }
    if ( ax.length >= 2 )
    {
      if ( D )
      {
        if ( !P )
        {
          P = ax.shift()
        }
        if ( !aD )
        {
          aD = ax.shift()
        }
      }
      else
      {
        if ( !aD )
        {
          aD = ax.shift()
        }
        if ( !P )
        {
          P = ax.shift()
        }
      }
    }
    else
    {
      if ( ax.length == 1 )
      {
        if ( !aD )
        {
          aD = ax.shift()
        }
        else
        {
          if ( !P )
          {
            P = ax.shift()
          }
        }
      }
    }
    if ( !aB )
    {
      aB = ax.length > 0 ? ax.shift() : aw.getFullYear()
    }
    if ( aB < 30 )
    {
      aB += 2000
    }
    else
    {
      if ( aB < 99 )
      {
        aB += 1900
      }
    }
    if ( !P )
    {
      P = aw.getMonth() + 1
    }
    return aB && P && aD ? new Date(Date.UTC(aB, P - 1, aD, av, ar, aC)) : null
  };
  function al( D, at, P, ar )
  {
    ar = {};
    for ( P in at )
    {
      if ( at.hasOwnProperty(P) )
      {
        ar[P] = at[P]
      }
    }
    for ( P in D )
    {
      if ( D.hasOwnProperty(P) )
      {
        ar[P] = D[P]
      }
    }
    return ar
  }
  function p( ar, au, at, D )
  {
    if ( ar instanceof Array )
    {
      for ( var P = ar.length; --P >= 0; )
      {
        p(ar[P], au, at, D)
      }
    }
    else
    {
      if ( typeof au == "object" )
      {
        for ( var P in au )
        {
          if ( au.hasOwnProperty(P) )
          {
            p(ar, P, au[P], at)
          }
        }
      }
      else
      {
        if ( ar.addEventListener )
        {
          ar.addEventListener(au, at, j ? true : !!D)
        }
        else
        {
          if ( ar.attachEvent )
          {
            ar.attachEvent("on" + au, at)
          }
          else
          {
            ar["on" + au] = at
          }
        }
      }
    }
  }
  function d( ar, au, at, D )
  {
    if ( ar instanceof Array )
    {
      for ( var P = ar.length; --P >= 0; )
      {
        d(ar[P], au, at)
      }
    }
    else
    {
      if ( typeof au == "object" )
      {
        for ( var P in au )
        {
          if ( au.hasOwnProperty(P) )
          {
            d(ar, P, au[P], at)
          }
        }
      }
      else
      {
        if ( ar.removeEventListener )
        {
          ar.removeEventListener(au, at, j ? true : !!D)
        }
        else
        {
          if ( ar.detachEvent )
          {
            ar.detachEvent("on" + au, at)
          }
          else
          {
            ar["on" + au] = null
          }
        }
      }
    }
  }
  function an( D )
  {
    D = D || window.event;
    if ( j )
    {
      D.cancelBubble = true;
      D.returnValue = false
    }
    else
    {
      D.preventDefault();
      D.stopPropagation()
    }
    return false
  }
  function aj( au, at, av )
  {
    if ( au )
    {
      var D = au.className.replace(/^\s+|\s+$/, "").split(/\x20/),P = [],ar;
      for ( ar = D.length; ar > 0; )
      {
        if ( D[--ar] != at )
        {
          P.push(D[ar])
        }
      }
      if ( av )
      {
        P.push(av)
      }
      au.className = P.join(" ")
    }
    return av
  }
  function M( P, D )
  {
    return aj(P, D, D)
  }
  function ae( at, ar, P )
  {
    if ( ar instanceof Array )
    {
      for ( var D = ar.length; --D >= 0; )
      {
        ae(at, ar[D], P)
      }
    }
    else
    {
      aj(ar, P, at ? P : null)
    }
    return at
  }
  function G( at, D, ar )
  {
    var P = null;
    if ( document.createElementNS )
    {
      P = document.createElementNS("http://www.w3.org/1999/xhtml", at)
    }
    else
    {
      P = document.createElement(at)
    }
    if ( D )
    {
      P.className = D
    }
    if ( ar )
    {
      ar.appendChild(P)
    }
    return P
  }
  function b( au, av )
  {
    if ( av == null )
    {
      av = 0
    }
    var D,at,P;
    try
    {
      D = Array.prototype.slice.call(au, av)
    }
    catch( ar )
    {
      D = new Array(au.length - av);
      for ( at = av,P = 0; at < au.length; ++at,++P )
      {
        D[P] = au[at]
      }
    }
    return D
  }
  function v( P, ar )
  {
    var D = b(arguments, 2);
    return(ar == undefined ? function()
    {
      return P.apply(this, D.concat(b(arguments)))
    } : function()
    {
      return P.apply(ar, D.concat(b(arguments)))
    })
  }
  function t( P, ar )
  {
    if ( !ar(P) )
    {
      for ( var D = P.firstChild; D; D = D.nextSibling )
      {
        if ( D.nodeType == 1 )
        {
          t(D, ar)
        }
      }
    }
  }
  function ap( D, aw, ar )
  {
    D = al(D, {fps:50,len:15,onUpdate:ad,onStop:ad});
    if ( j )
    {
      D.len = Math.round(D.len / 2)
    }
    function at( aA, az, ax, ay )
    {
      return ay ? ax + aA * (az - ax) : az + aA * (ax - az)
    }
    function av()
    {
      if ( aw )
      {
        P()
      }
      ar = 0;
      aw = setInterval(au, 1000 / D.fps)
    }
    function P()
    {
      if ( aw )
      {
        clearInterval(aw);
        aw = null
      }
      D.onStop(ar / D.len, at)
    }
    function au()
    {
      var ax = D.len;
      D.onUpdate(ar / ax, at);
      if ( ar == ax )
      {
        P()
      }
      ++ar
    }
    av();
    return{start:av,stop:P,update:au,args:D,map:at}
  }
  var Z = {elastic_b:function( D )
  {
    return 1 - Math.cos(-D * 5.5 * Math.PI) / Math.pow(2, 7 * D)
  },magnetic:function( D )
  {
    return 1 - Math.cos(D * D * D * 10.5 * Math.PI) / Math.exp(4 * D)
  },accel_b:function( D )
  {
    D = 1 - D;
    return 1 - D * D * D * D
  },accel_a:function( D )
  {
    return D * D * D
  },accel_ab:function( D )
  {
    D = 1 - D;
    return 1 - Math.sin(D * D * Math.PI / 2)
  },accel_ab2:function( D )
  {
    return(D /= 0.5) < 1 ? 1 / 2 * D * D : -1 / 2 * ((--D) * (D - 2) - 1)
  },brakes:function( D )
  {
    D = 1 - D;
    return 1 - Math.sin(D * D * Math.PI)
  },shake:function( D )
  {
    return D < 0.5 ? -Math.cos(D * 11 * Math.PI) * D * D : (D = 1 - D,Math.cos(D * 11 * Math.PI) * D * D)
  }};
  function am( D, P )
  {
    if ( P === "" )
    {
      j ? D.style.filter = "" : D.style.opacity = ""
    }
    else
    {
      if ( P != null )
      {
        j ? D.style.filter = "alpha(opacity=" + P * 100 + ")" : D.style.opacity = P
      }
      else
      {
        if ( !j )
        {
          P = parseFloat(D.style.opacity)
        }
        else
        {
          if ( /alpha\(opacity=([0-9.])+\)/.test(D.style.opacity) )
          {
            P = parseFloat(RegExp.$1) / 100
          }
        }
      }
    }
    return P
  }
  function O( ar, D )
  {
    var P = ar.style;
    if ( D != null )
    {
      P.display = D ? "" : "none"
    }
    return P.display != "none"
  }
  function f( P, ar )
  {
    var D = j ? P.clientX + document.body.scrollLeft : P.pageX;
    var at = j ? P.clientY + document.body.scrollTop : P.pageY;
    if ( ar )
    {
      D -= ar.x;
      at -= ar.y
    }
    return{x:D,y:at}
  }
  function J( au )
  {
    var D = 0,at = 0,ar = /^div$/i.test(au.tagName),av,P;
    if ( ar && au.scrollLeft )
    {
      D = au.scrollLeft
    }
    if ( ar && au.scrollTop )
    {
      at = au.scrollTop
    }
    av = {x:au.offsetLeft - D,y:au.offsetTop - at};
    if ( au.offsetParent )
    {
      P = J(au.offsetParent);
      av.x += P.x;
      av.y += P.y
    }
    return av
  }
  function X()
  {
    var P = document.documentElement,D = document.body;
    return{x:P.scrollLeft || D.scrollLeft,y:P.scrollTop || D.scrollTop,w:P.clientWidth || window.innerWidth || D.clientWidth,h:P.clientHeight || window.innerHeight || D.clientHeight}
  }
  function m( D, ar, P )
  {
    for ( P = 0; P < D.length; ++P )
    {
      ar(D[P])
    }
  }
  var ad = new Function();
  function W( D )
  {
    if ( typeof D == "string" )
    {
      D = document.getElementById(D)
    }
    return D
  }
  return y
})();